package chapter07

/**
 * 高级计算函数
 * 集合转换操作Reduce
 */
object Test15_HighLevelFunction_Reduce {
  def main(args: Array[String]): Unit = {
    val list = List(1, 2, 3, 4)

    //1、Reduce
    println(list.reduce(_ + _))
    println(list.reduceLeft(_ + _))
    println(list.reduceRight(_ + _))

    println("------------------------------------")


    //reduce 可以认为初始值就是第一个数
    val list2 = List(3, 4, 5, 8, 10)
    println(list2.reduce(_ - _)) //-24
    println(list2.reduceLeft(_ - _))
    println(list2.reduceRight(_ - _))

    //2、fold 需要单独传入一个初始值
    println("fold............")
    println(list.fold(10)(_ + _)) //10+1+2+3+4
    println(list.foldLeft(10)(_ - _)) // 10 - 1 - 2 - 3 - 4
    println(list.foldRight(11)(_ - _)) //3-(4-(5-(8-(10-11))))
  }
}
